#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <errno.h>
#include "parse_cfg.h"
#include "db.h"
#include "common.h"

/*   删除左边的空格   */
char * l_trim(char * szOutput, const char *szInput)
{
  assert(szInput != NULL);
  assert(szOutput != NULL);
  assert(szOutput != szInput);
  for(NULL; *szInput != '\0' && isspace(*szInput); ++szInput)
  {
    ;
  }

  return strcpy(szOutput, szInput);
}

/*   删除右边的空格   */
char *r_trim(char *szOutput, const char *szInput)
{
  char *p = NULL;
  assert(szInput != NULL);
  assert(szOutput != NULL);
  assert(szOutput != szInput);
  strcpy(szOutput, szInput);

  for(p = szOutput + strlen(szOutput) - 1; p >= szOutput && isspace(*p); --p)
  {
    ;
  }

  *(++p) = '\0';
  return szOutput;
}

/*   删除两边的空格   */
char * a_trim(char * szOutput, const char * szInput)
{
  char *p = NULL;
  assert(szInput != NULL);
  assert(szOutput != NULL);
  l_trim(szOutput, szInput);

  for(p = szOutput + strlen(szOutput) - 1;p >= szOutput && isspace(*p); --p)
  {
    ;
  }
  
  *(++p) = '\0';
  return szOutput;
}


/* 根据标签获取  */
int GetProfileString(char *profile, char *AppName, char *KeyName, char *KeyVal )
{
  char appname[32],keyname[32];
  char *buf,*c;
  char buf_i[KEYVALLEN], buf_o[KEYVALLEN];
  FILE *fp;
  int found=0; /* 1 AppName 2 KeyName */

  if( (fp=fopen( profile,"r" ))==NULL ){
    printf( "openfile [%s] error [%s]\n",profile,strerror(errno) );
    return(-1);
  }

  fseek(fp,0,SEEK_SET);
  memset(appname,0,sizeof(appname));
  sprintf(appname,"[%s]",AppName);

  while( !feof(fp) && fgets( buf_i, KEYVALLEN, fp )!=NULL )
  {
    l_trim(buf_o, buf_i);
    if( strlen(buf_o) <= 0 )
      continue;

    buf = NULL;
    buf = buf_o;

    if( found == 0 )
    {
      if( buf[0] != '[' ) 
      {
        continue;
      }else if( strncmp(buf,appname,strlen(appname))==0 )
      {
        found = 1;
        continue;
      }

    }else if(found == 1)
    {
      if( buf[0] == '#' ){
        continue;
      }else if( buf[0] == '[' )
      {
        break;
      }else
      {
        if( (c = (char*)strchr(buf, '=')) == NULL )  
          continue;
        memset( keyname, 0, sizeof(keyname) );

        sscanf( buf, "%[^=|^ |^\t]", keyname );

        if( strcmp(keyname, KeyName) == 0 )
        {
          sscanf( ++c, "%[^\n]", KeyVal );
          char *KeyVal_o = (char *)malloc(strlen(KeyVal) + 1);
          if(KeyVal_o != NULL)
          {
            memset(KeyVal_o, 0, sizeof(KeyVal_o));
            a_trim(KeyVal_o, KeyVal);
            if(KeyVal_o && strlen(KeyVal_o) > 0)
              strcpy(KeyVal, KeyVal_o);
            free(KeyVal_o);
            KeyVal_o = NULL;
          }
          found = 2;
          break;
        }else {
          continue;
        }
      }
    }
}

  fclose( fp );
  if( found == 2 )
    return(0);
  else
    return(-1);
}

char**  GetProfileValue(char *label)
{

  if(label == NULL)
  {
    fprintf(stderr,"Label is NULL\n");
    exit(-1);
  }
  /*
  
  if(confile == NULL)
  {
    //confile = "/usr/local/zabbix2/etc/monitor_mysql.conf";
    confile = "./monitor_mysql.cfg";
  }

  printf("In The function confile is %s\n",confile);
  */
  //printf("%s\n",CONFIG_FILE);
  //printf("%s\n",label);

  GetProfileString(CONFIG_FILE,label,"host",db_host);
  GetProfileString(CONFIG_FILE,label,"dbuser",db_user);
  GetProfileString(CONFIG_FILE,label,"dbname",db_name);
  GetProfileString(CONFIG_FILE,label,"dbpasswd",db_passwd);
  GetProfileString(CONFIG_FILE,label,"dbport",db_port);
  //printf("db_host = %s\n",db_host);

  conf_ret[0] = db_host;
  conf_ret[1] = db_user;
  conf_ret[2] = db_passwd;
  conf_ret[3] = db_name;
  conf_ret[4] = db_port;

  //printf("%s\n",conf_ret[0]);

  return conf_ret;
}

/*
 * Use Example
   The Configure File Name is  cls.conf and Content As Fllow

   [db-1]
   host=192.168.0.1
   dbname=test
   dbuser=user1
   dbpasswd=user1
   dbport=3306

   [db-2]
   host=192.168.0.2
   dbname=test
   dbuser=user2
   dbpasswd=user2
   dbport=3307
   
   Parse The Configure File As Fllow

   char host[16];
   char dbname[16];
   char dbuser[16];
   char dbpasswd[128];
   char dbport[5];

   GetProfileString("./cls.conf", "db-1", "host", host);
   GetProfileString("./cls.conf", "db-1", "dbname", dbname);
   GetProfileString("./cls.conf", "db-1", "dbuser", dbuser);

   GetProfileString("./cls.conf", "db-2", "host", host);
   GetProfileString("./cls.conf", "db-2", "dbname", dbname);
   GetProfileString("./cls.conf", "db-2", "dbuser", dbuser);

 * */
